package com.atguigu.gmall.product.client;

import com.atguigu.gmall.model.product.BaseCategoryView;
import com.atguigu.gmall.model.product.BaseTrademark;
import com.atguigu.gmall.model.product.SkuInfo;
import com.atguigu.gmall.model.product.SpuSaleAttr;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author: 李旭
 * @create: 2021-07-09 14:06
 **/
@FeignClient(name = "service-product",fallback = ProductDegradedClientImpl.class)
public interface ProductFeignClient {

    //1：查询SkuInfo 根据skuId
    @GetMapping("/api/product/inner/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable Long skuId);//此方法抛出异常 进行降级处理

    //2：查询 分类视图  条件：三级分类的ID
    @GetMapping("/api/product/inner/getBaseCagegoryView/{category3Id}")
    public BaseCategoryView getBaseCagegoryView(@PathVariable Long category3Id);

    //3:单独查询价格  注意事项：不可以优化 不可以放入缓存  BigDecimal: 钱方面的
    @GetMapping("/api/product/inner/getPrice/{skuId}")
    public BigDecimal getPrice(@PathVariable Long skuId);

    //4：根据spuId,skuId 查询销售属性及属性值  集合  销售属性及值的红边框  SQL
    @GetMapping("/api/product/inner/getSpuSaleAttrAndValue/{spuId}/{skuId}")
    public List<SpuSaleAttr> getSpuSaleAttrAndValue(
            @PathVariable Long spuId,
            @PathVariable Long skuId
    );
    //5:组合数据   返回值 Map  没有可使用的对象的时候 使用Map  无敌版对象  万能对象
    @GetMapping("/api/product/inner/getSaleAttrValuesBySpu/{spuId}")
    public Map getSaleAttrValuesBySpu(@PathVariable Long spuId);

    //首页之所有需要一二三级分类  查询分类视图即可
    @GetMapping("/api/product/inner/getBaseCagegoryViewList")
    public List<BaseCategoryView> getBaseCagegoryViewList();

    @GetMapping("/api/product/inner/getBaseTrademark/{tmId}")
    BaseTrademark getBaseTrademark(@PathVariable Long tmId);

    //根据skuId 查询base_attr_info（平台属性名） base_attr_value（平台属性值表）  sku_attr_value (关联表）
    @GetMapping("/api/product/inner/getSkuAttrValue/{skuId}")
    public List<Map> getSkuAttrValue(@PathVariable Long skuId);
}
